package es.urjc.ldm.carrodecompra;


public class CalculadoraPrecios {
	
	/** Calcula el precio total de los mismos tipos de articulos dependiendo si existe oferta.
	 *
	 * @author manuelgblanco
	 * @version 1.0z 1 Abril, 2013.
	 * @param numArt priceUnit offer El numero de articulos, el precio por unidad y si existe oferta
	 * para aplicarla. 
	 * @return double devuelve el precio calculado 
	 */	
	public static double calcularPrecio(int numArt, double priceUnit, OfertasEnum offer){
		double totalPrice = 0;
		
		switch (offer){
			case NOTHING: totalPrice = (priceUnit * numArt); break;
			case FIFTYPERCENT: totalPrice = oferta50Porciento(numArt, priceUnit); break;
			case THREEPERTWO: totalPrice = oferta3x2(numArt, priceUnit); break;
			default: totalPrice = (priceUnit * numArt); break;
		}
		return totalPrice;
	}

	/** Calcula el precio total para una oferta de 3x2
	 *
	 * @author manuelgblanco
	 * @version 1.0z 1 Abril, 2013.
	 * @param numArt, priceUnit numero de articulos y su precio por unidad
	 * @return double el precio total calculado
	 */
	private static double oferta3x2(int numArt, double priceUnit){
		double totalPrice = 0;
		
		double numOffer = Math.floor(numArt / 3);
		
		if ((numArt % 3) == 0){
			totalPrice = (priceUnit * (numArt-numOffer));
		}else{
			if (numOffer > 0){
				totalPrice = (priceUnit * (numArt-numOffer));
			}else{
				totalPrice = (priceUnit * numArt);
			}
		}
		return totalPrice;
	}
	
	/** Calcula el precio total para una oferta del 50% la segunda unidad
	 *
	 * @author manuelgblanco
	 * @version 1.0z 1 Abril, 2013.
	 * @param numArt, priceUnit numero de articulos y su precio por unidad
	 * @return double el precio total calculado
	 */
	private static double oferta50Porciento(int numArt, double priceUnit){
		double totalPrice = 0;
		
		double numOffer = Math.floor(numArt / 2);
		
		totalPrice = ((priceUnit * (numArt-numOffer)) + (priceUnit * numOffer * 0.5));

		return totalPrice;
	}
}
